\subsection{Plugin Synergy}
\fancyfoot[C]{Plugin Synergy}
Plugins in Siberia CMS are not limited to standalone blocks of features; multiple plugins may be combined to exponentially increase their usefulness in the system. This is done by leveraging the capability of Displays to both control what is displayed where and to control what is displayed inside Displays.\newline

\begin{figure}[!ht]
  \centering
    \includegraphics[width=6in]{Synergy1.eps}
  \caption{Screenshot of an example VladBuyableDisplay being displayed, with a ImpgalAlbumLinkDisplay nested within it.}
\label{fig:ImpgalWithinVlad}
\end{figure}

\begin{figure}[!ht]
  \centering
    \includegraphics[width=6in]{Synergy2.eps}
  \caption{Screenshot of multiple example ImpgalAlbumLinkDisplays displaying VladBuyableDisplays under each ImpgalAlbumLinkDisplay.}
\label{fig:VladWithinImpgal}
\end{figure}

\begin{figure}[!ht]
	\centering
		\begin{verbatim}
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="ProductDisplayCode.ascx.cs" 
Inherits="ProductDisplayCode" Debug="true" %>
<asp:Literal ID="Literal_Begin" runat="server"></asp:Literal>
 
<asp:Panel ID="thePanel" runat="server">
</asp:Panel>
 
<asp:Literal ID="Literal_End" runat="server"></asp:Literal>
		\end{verbatim}
	\caption{ASCX code detailing the visual representation of a VladBuyable.}
	\label{code:exampleSynergyCode1}
\end{figure}

\begin{figure}[!ht]
	\centering
		\begin{verbatim}
public class ProductDisplayCode
{
	public void DataBind()
	{
		string rowbegin = "<div class=\"productdiv\">";
		string rowend = "</div>";
		string rowheader = Product.getName();
		
		Literal_RowBegin.Text = rowbegin + rowheader;
		Literal_RowEnd.Text = rowend;
		
		string desc = Product.getDescription();
		string price = Product.getPrice();
		string addtocartlink = Product.getAddToCartLink();
		int productid = Product.getId();
		
		thePanel.Controls.Add(desc);
		thePanel.Controls.Add(price);
		thePanel.Controls.Add(addtocartlink);

		ProductGallery pg1 = (ProductGallery)Page.LoadControl("~/ProductGallery.ascx");
		pg1.productId = productid;
		thePanel.Controls.Add(pg1);
	}
}
		\end{verbatim}
	\caption{ASCX codebehind for a VladBuyable wrapping an ImpgalAlbumLinkDisplay. Note the instantiation of a ProductGallery at the very end of the code.}
	\label{code:exampleSynergyCode2}
\end{figure}

First, Plugins can be grouped and displayed according to need,
allowing more usefulness in one area of a page or website than if the
plugins were separate pages or sections of a website. An example
demonstrating this with Imperial Gallery and Vladivostok Commerce: a
gallery of photograph albums, with those albums that are available for
purchase having a Buy link under their description. This works by placing the Displays one below the other when designing the page, as shown in Figure \ref{fig:VladWithinImpgal}, which shows a Buy link below a Display of galleries.\newline

Secondly, Plugins can call another Plugin when necessary, allowing an
exponential increase in usefulness to the user due to the limitless
nature of a nested hierarchy of functionality. An example
demonstrating this with Imperial Gallery and Vladivostok Commerce: a
list of products, with each product (along with normal product
details) containing within it an album of images or photographs,
semantically linked to the product and logically nested within the
product via a nested Display call. This ability to nest Displays is illustrated in Figure \ref{fig:ImpgalWithinVlad} which shows a gallery nested inside a product description Display. Figures \ref{code:exampleSynergyCode1} and \ref{code:exampleSynergyCode2} refer to an implementation the ASCX frontend and the corresponding code-behind for this kind of system.
